package game.controler.ecouteurs.vue;

import game.controler.gestionnaires.elementjeu.GestionnaireDecors;
import game.controler.gestionnaires.elementjeu.GestionnaireFous;
import game.controler.gestionnaires.elementjeu.GestionnaireObjets;
import game.controler.gestionnaires.elementjeu.GestionnairePnj;
import game.model.objets.ElementJeu;
import game.model.objets.Fou;
import game.model.objets.Objet;
import game.model.objets.PNJ;
import java.awt.Image;
import java.awt.Point;
import java.awt.image.BufferedImage;

/**
 *
 * @author Gab'z
 */
public class TesteurImage {

    public static boolean isTransparent(Class aClass, String id, Point positionClic) {
        Image image;
        System.out.println("position clic " + positionClic.x + " " + positionClic.y);
        if (aClass == Objet.class) {
            System.out.println("TYPE OBJET");
            image = GestionnaireObjets.getGobjets().getObjet(id).getImgJeu().getImage();
        } else if (aClass == Fou.class) {
            System.out.println("TYPE FOU");
            image = GestionnaireFous.getGfous().getFou(id).getImgJeu().getImage();
        } else if (aClass == PNJ.class) {
            System.out.println("TYPE PNJ");
            image = GestionnairePnj.getGpnj().getPNJ(id).getImgJeu().getImage();
        } else {
            System.out.println("TYPE ELEMENT DECORS");
            image = GestionnaireDecors.getGdecors().getElementDecors(id).getImgJeu().getImage();
        }
        BufferedImage bufImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
        bufImage.getGraphics().drawImage(image, 0, 0, null);

        int pixel = bufImage.getRGB(positionClic.x, positionClic.y);

        if (((pixel >> 24) & 0xff) == 0) {
            return true;
        } else {
            return false;
        }

    }

    public static ElementJeu testerClic(Class aClass, String id, Point coordAbsolueClic) {
        ElementJeu elmtJeu = null;
        if (aClass == Objet.class) {
            System.out.println("TYPE OBJET");
            elmtJeu = GestionnaireObjets.getGobjets().getObjet(id);
        } else if (aClass == Fou.class) {
            System.out.println("TYPE FOU");
            elmtJeu = GestionnaireFous.getGfous().getFou(id);
        } else if (aClass == PNJ.class) {
            System.out.println("TYPE PNJ");
            elmtJeu = GestionnairePnj.getGpnj().getPNJ(id);
        } else {
            System.out.println("TYPE ELEMENT DECORS");
            elmtJeu = GestionnaireDecors.getGdecors().getElementDecors(id);
        }

        Point positionElmtJeu = elmtJeu.getPosition();
        Point positionClicDansElementJeu = new Point(coordAbsolueClic.x - positionElmtJeu.x, coordAbsolueClic.y - positionElmtJeu.y);
        Image image = elmtJeu.getImgJeu().getImage();
        // On vérifie que le point que l'on va tester n'est pas en dehors de l'image
        if (positionClicDansElementJeu.x >= 0 && positionClicDansElementJeu.y >= 0 && positionClicDansElementJeu.x < image.getWidth(null) && positionClicDansElementJeu.y < image.getHeight(null)) {
            BufferedImage bufImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
            bufImage.getGraphics().drawImage(image, 0, 0, null);

            int pixel = bufImage.getRGB(positionClicDansElementJeu.x, positionClicDansElementJeu.y);

            if (((pixel >> 24) & 0xff) != 0) {
                return elmtJeu;
            }
        }
        return null;

    }
}
